#include "NomFichier.h"

#include <QtGui/QLabel>
#include <QtGui/QComboBox>
#include <QtGui/QHBoxLayout>
#include <QtGui/QPushButton>
#include <QtCore/QFile>
#include <QtCore/QStringList>
#include <QtCore/QTextStream>
#include <QtGui/QLineEdit>

using namespace std;

/** Constructeur par défaut.
 * Crée le layout de la fenêtre, avec le bon widget, dépendant du mode
 * d'ouverture du fichier désiré : écriture (= sauvegarde) ou lecture
 * (= chargement).
 *
 * @param quoi texte affiché (question).
 * @param ecrire bascule entre le mode création et lecture.
 * @param parent pointeur sur le widget parent (orphelin par défaut).
 */
NomFichier::NomFichier(const QString& quoi, const bool& ecrire, QWidget *parent)
  : BaseUI( "NomFichier", parent), creerFichier( ecrire )
{
  legende = new QLabel( quoi, this );

  QHBoxLayout *hlayout = new QHBoxLayout(  );


  boutons.push_back( new QPushButton( trUtf8("&Quitter"), this ) );
  boutons.back() -> setToolTip( trUtf8("Quitter le programme") );
  connect( boutons.back()  , SIGNAL( clicked() ), this, SLOT( annuler() ) );
  boutons.push_back( new QPushButton( trUtf8("&OK"), this ) );
  boutons.back() -> setToolTip( trUtf8("Accepter et continuer") );
  connect( boutons.back(), SIGNAL( clicked() ), this, SLOT( fermer() ) );

  hlayout -> addWidget( legende );

  if (!creerFichier)
    {
      nom = new QComboBox( this );

      nomEdit = 0;

      fichier = new QFile(".tmp");
  
      QStringList listeFichiers;
  
      if (fichier -> open(QIODevice::ReadOnly))
	{
	  QTextStream lecture(fichier);
	  QString contenu(lecture.readAll());
	  
	  contenu = contenu.simplified();
	  
	  listeFichiers = contenu.split(" ", QString::SkipEmptyParts);
	}
      
      nom -> addItems(listeFichiers);
      
      fichier -> close();
      delete fichier;

      hlayout -> addWidget( nom );
    }
  else
    { 
      nomEdit = new QLineEdit( this );

      nomEdit -> setFixedSize(150, 28);

      nomEdit -> setToolTip( trUtf8("Nom du fichier, sans extension ni dossier") );

      nom = new QComboBox( this );

      nom -> addItem( QString::fromUtf8( "XML schéma" ) );
      nom -> addItem( QString::fromUtf8( "DTD" ) );

      nomEdit -> setToolTip( trUtf8( "Méthode de validation désirée" ) );

      nom -> setCurrentIndex( 0 );

      hlayout -> addWidget( nomEdit );
      hlayout -> addWidget( nom );
    }

  fenetreLayout -> insertLayout(1, hlayout);

  setFenetreLayout();
}

/**
 * Destructeur, ne fait rien de spécial
 */
NomFichier::~NomFichier()
{}

/** Permet de lire le nom du fichier à lire ou à créer.
 * Si on est en mode écriture, alors l'extension .xml est ajoutée
 * automatiquement, ainsi que le nom du dossier.
 *
 * En mode lecture, le nom dans le menu déroulant contient déjà toute
 * l'information nécessaire.
 *
 * @param reponse nom du fichier.
 * @return StatusCode \e true si entrée validée, \e false sinon. Dans
 * le cas de la création d'un fichier, le champ Valeur du StatusCode
 * contient la méthode de validation désirée.
 */
StatusCode NomFichier::lireEntree(string& reponse)
{
  this -> show();

  qApp -> exec();

  if (creerFichier)
    {
      reponse = "XML/" + nomEdit -> displayText() . toStdString() + ".xml";

      return StatusCode( OK, nom -> currentIndex() );
    }

  reponse = nom -> currentText() . toStdString();

  return StatusCode( OK );
}


